package com.hospital.service.project.service;

import com.hospital.service.project.model.param.*;
import com.hospital.service.project.model.vo.ProInfoBaseVo;
import com.hospital.service.project.model.vo.ProInfoBaseVo3;
import enhance.plus.logic.LogicBaseService;

import com.hospital.service.project.entity.ProInfoBase;
import enhance.plus.util.Page;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

/**
 * 实验项目基本表 接口
 *
 * @author xhl
 * @created 2020-10-10 13:58:34
 */
public interface ProInfoBaseService extends LogicBaseService<ProInfoBase>{

    /**
     * 新增父实验项目
     *
     * @param param
     */
    void save(ProInfoBaseParam param);

    /**
     * 新增子实验项目
     *
     * @param param
     */
    void save(ProInfoBaseSaveSonParam param);

    /**
     * 生成项目检索编号
     *
     * @param isParent true：父项目 false：子项目
     * @return
     */
    String itemGenerate(boolean isParent);

    /**
     * 生成检索编号
     * @param formName 表名
     * @param prefix  前缀
     * @return
     */
    String getCode(String formName,String prefix,String field);


    /**
     * 更新项目【修改项目信息】
     *
     * @param param
     */
    void updateProject(ProInfoBaseUpdateParam param);

    /**
     * 查询一条数据
     *
     * @param param
     * @return
     */
    ProInfoBaseVo queryForOneRow(ProInfoBaseQueryForOneRowParam param);

    /**
     * 分页查询项目
     *
     * @param param
     * @return
     */
    Page<ProInfoBaseVo> queryPage(ProInfoBaseQueryPageParam param);

    /**
     * 批量删除项目
     *
     * @param param
     */
    void removeProject(ProInfoBaseDeleteParam param);

    /**
     * 导出文件
     *
     * @param response
     * @param param
     */
    void projectExport(ProjectExportParam param, HttpServletResponse response);

    /**
     * 导入父项目excel文件
     *
     * @param file
     */
    void importSuperProject(MultipartFile file);

    /**
     * 导入子项目excel文件
     *  @param file
     *
     */
    void importSonProject(MultipartFile file);

    /**
     * 查询子项目的基本信息
     *
     * @param param
     * @return
     */
    ProInfoBaseVo3 querySonMessage(ProInfoBaseQueryForOneRowParam param);
}
